package callable;

import java.util.concurrent.FutureTask;

/**
 * @author lwj
 * @date 2025-03-10
 * @vesion 1.0.0
 */
public class MainTest02 {
    public static void main(String[] args) {
        // 第二：创建实现 Callable 接口的对象
        MyCallable myCallable = new MyCallable();

        // 第三：创建 FutureTask 对象，并设置 Callable 对象
        FutureTask<Integer> futureTask = new FutureTask<Integer>(myCallable);

        // 第四：创建线程对象
        Thread thread = new Thread(futureTask);

        // 第五：启动线程 - 调用 FutureTask 对象重写的 run 方法
        thread.start();

        // 第六：获取结果 - 注意：调用 get 方法
        // 主线程阻塞，同步等待 task 执行完毕的结果
        try {
            //主线程三秒后，取消任务 - 任务被取消后会抛出异常
            Thread.sleep(3000);
            futureTask.cancel(true);
            Integer data = futureTask.get();
            System.out.println(data);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        System.out.println("主线程的一些相关操作");
    }
}
